A “cloud” is a general term for a computing resource consisting of a large number of individual machines. These machines are typically physical, but may be logical machines in virtualized systems. Such machines typically use heterogeneous hardware and software, although some clouds are purely homogeneous.
In a heterogeneous cloud, there are, by definition, differences between the machines in the cloud. In hardware terms, this may mean that some machines in the cloud are better suited for certain types of work. For example, a mainframe may be best suited to I/O intensive work or large batch processing. In extreme cases, hardware differences may make it impossible to perform certain types of work. For example, a PowerPC machine may be unable to run code compiled for the x86 instruction set.
These differences also apply to the software stack installed on machines in the cloud. Sometimes, perhaps due to licensing restrictions or performance/storage limitations, not all machines in the cloud are capable of running the same applications. An example would be an Enterprise Java™ application. This type of application requires a JEE Application Server to be installed on the machine in the cloud. The application may have additional requirements (e.g., support for Session Initiation Protocol for Voice over IP) which may also need to be satisfied. Installing sufficient software to ensure that any application can run on any machine is likely to be prohibitive in terms of cost. It may also be impossible if the pieces of software have different incompatible dependencies. As a result, not every machine is likely to be able to run every application.
In a heterogeneous cloud, it is important to match the composition of the cloud to the workload being applied. This means that if a large number of Java applications need to run, then the cloud should contain a sufficient number of machines that can run Java applications. The cloud will consequently need fewer machines running Voice over IP (VoIP) routing software, since demand may be low. The problem with such a setup is that it requires either continuous, active management of the cloud, or a relatively inefficient static distribution of machine types. Both solutions are inefficient and costly. It may also be difficult to add new machines to the cloud, since it may require making an initial decision about how the machines are to be specialized.
In view of the foregoing, what are needed are apparatus and methods to dynamically provision machines with applications to enable them to more efficiently assist with work in a cloud computing environment.